iT邦幫忙

2023 iThome 鐵人賽

DAY 30
0

接續昨天,今天要來講k8s的另一個資源型態--Deployment

Deployment

我們在講的Application 其實都是指Deployment,Deployment這個資源可以幫我們做到自動佈署一個容器應用的多個備份,他會持續監控容器的數量,當低於指定的備份數量時,就會自動創建,保證我們容器運行的數量。

那來看一下怎麼撰寫吧

apiVersion: apps/v1
kind: Deployment
metadata:
  name: spring-boot-itdemo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: spring-boot-itdemo
  template:
    metadata:
      labels:
        app: spring-boot-itdemo
    spec:
      containers:
        - name: spring-boot-itdemo
          image: spring-boot-itdemo:latest
          ports:
            - containerPort: 8080
          env:
            - name: SPRING_DATASOURCE_URL
              value: jdbc:postgresql://db:5432/postgres
            - name: SPRING_DATASOURCE_USERNAME
              value: postgres
            - name: SPRING_DATASOURCE_PASSWORD
              value: postgres

介紹過的就不贅述了,這裡的新面孔有
replicas:這就是我們指定的服務備分數量,根據此設定,若有少的話Deployment會自己幫忙補上
selector:告訴Deployment要補上的container是誰。
template:撰寫此Deployment的運行內容,跟之前撰寫的Pod內容幾乎相同。

建好Deployment後,可以發現,我們還有資料庫要進行溝通,講到溝通就可以想到Service,因此我們今天還要來講一下預設的Service模式--ClusterIP

簡單來說ClusterIP提供的是集群內部的服務的溝通橋樑,集群內的Pod可以透過它互相訪問,集群外部則無法。
來看一下怎麼建立ClusterIP的Service

apiVersion: v1
kind: Service
metadata:
  name: spring-boot-itdemo
spec:
  selector:
    app: spring-boot-itdemo
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080

這樣在集群內,8080就可以透過這個Service連接到了

最後附上完整的yml檔

  1. k8s.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgresql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: postgresql
  template:
    metadata:
      labels:
        app: postgresql
    spec:
      containers:
        - name: postgresql
          image: postgres:15.2-alpine
          ports:
            - containerPort: 5432
          env:
            - name: POSTGRES_PASSWORD
              value: postgres
            - name: POSTGRES_DB
              value: postgres

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: spring-boot-itdemo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: spring-boot-itdemo
  template:
    metadata:
      labels:
        app: spring-boot-itdemo
    spec:
      containers:
        - name: spring-boot-itdemo
          image: allenku0/spring-boot-itdemo
          ports:
            - containerPort: 8080
          env:
            - name: SPRING_DATASOURCE_URL
              value: jdbc:postgresql://db:5432/postgres
            - name: SPRING_DATASOURCE_USERNAME
              value: postgres
            - name: SPRING_DATASOURCE_PASSWORD
              value: postgres

---

apiVersion: v1
kind: Service
metadata:
  name: db
spec:
  selector:
    app: postgresql
  ports:
    - protocol: TCP
      port: 5432
      targetPort: 5432

---

apiVersion: v1
kind: Service
metadata:
  name: spring-boot-itdemo
spec:
  selector:
    app: spring-boot-itdemo
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080
  1. service.yml(NodePort)
apiVersion: v1
kind: Service
metadata:
  name: spring-boot-itdemo-service
spec:
  selector:
    app: spring-boot-itdemo
  type: NodePort
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 8080
      nodePort: 30391

以上 apply 後,即可完成佈署。看一下成果

  • POST
    https://ithelp.ithome.com.tw/upload/images/20230829/201391361fUFIWA72v.png
  • GET
    https://ithelp.ithome.com.tw/upload/images/20230829/20139136R9kabvqhK3.png

以上是我整套的從專案建置->打包Docker->佈上k8s的流程,希望能幫助到看文章的你
今天這這樣了喔,大家掰掰~


上一篇
K8s-Pod and Service
系列文
帶著MBP在異世界探險的科技宅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言